# by luffycity.com

# 什么是模块 一组功能的集合
# 你要和某个东西打交道,而这个东西本身和python没有关系,这个东西本身就存在
# python提供了一个功能的集合 专门负责和这个东西打交道

# 模块的类型
# 内置模块   不需要我们自己安装的 解释器自带的
# 第三方模块 需要我们自己安装的模块
# 自定义模块 我们自己写的模块

# 是谁把所有的硬件管理起来的? 操作系统
# 文件 在 硬盘上存储着
# 从硬盘上读文件

# import os   # 模块
# os.remove() # 删除文件
# os.rename() # 重命名文件

# 模块实际上就是给我们提供功能
# 这个要操作的内容本来就存在
# 模块只不过是python提供给我们去操作这个内容的方法

# 为什么要有模块
# 模块怎么用

# re模块
# 在python中使用正则表达式
# 正则表达式

# 先学习正则表达式
# 是一种独立的规则,独立的语言

# 正则表达式是什么?能做什么?
# 1.把一个文件中所有的手机号码都找出来     从大段的文字中找到符合规则的内容
    # open打开文件
    # 读文件 str
    # 从一长串的字符串中找到所有的11位数字
        # 一个字符一个字符的读
# 2.输入手机号                           判断某个字符串是否完全符合规则
#   验证这个手机号是否合法
#   给这个手机号发送一个验证码
#   用户收到验证码 填写验证码
#   完成注册

# 正则表达式
    # 从大段的文字中找到符合规则的内容
        # 爬虫 从网页的字符串中获取你想要的数据
        # 日志分析 提取 2018-8-12 10:---- 花的所有钱
            # 什么是日志 :
                # 2018-8-12 10:00:00 楼下早点摊 3.00
    # 判断某个字符串是否完全符合规则
        # 表单验证  : 手机号 qq号码 邮箱 银行卡 身份证号 密码

# 正则表达式 只和字符串打交道

# 正则表达式的规则
# 规则   字符串   从字符串中找到符合规则的内容

# 字符组 : [] 写在中括号中的内容,都出现在下面的某一个字符的位置上都是符合规则的
# [0-9]  匹配数字
# [a-z]  匹配小写字母
# [A-Z]  匹配大写字母
# [8-9]
# [a-zA-Z] 匹配大小写字母
# [a-zA-Z0-9] 匹配大小写字母+数字
# [a-zA-Z0-9_] 匹配数字字母下滑线

# 65 - 90
# 97 - 122

# 转义符
# w  w


# 元字符
# \w  匹配数字字母下滑线 word关键字 [a-zA-Z0-9_]
# \d  匹配所有的数字     digit     [0-9]
# \s  匹配所有的空白符 回车/换行符 制表符 空格   space  [\n\t ]
    # 匹配换行符 回车 \n
    # 匹配制表符 tab  \t
    # 匹配空格
# \W \D \S 和\w \d \s取反
    # [\s\S] [\d\D] [\w\W]是三组全集 意思是匹配所有字符
# \b 表示单词的边界

# 和转义字母相关的 元字符
# \w \d \s(\n\t) \b \W \D \S

# ^ $
# ^ 匹配一个字符串的开始
# $ 匹配一个字符串的结束

# . 表示匹配 除换行符之外的所有字符

# []  只要出现在中括号内的内容都可以被匹配
# [^] 只要不出现在中括号中的内容都可以被匹配
    # 有一些有特殊意义的元字符进入字符组中会回复它本来的意义 : . | [ ] ( )


# a|b  或  符合a规则的或者b规则的都可以被匹配
    # 如果a规则是b规则的一部分,且a规则比b规则要苛刻/长,就把a规则写在前面
    # 将更复杂的\更长的规则写在最前面
# () 分组  表示给几个字符加上量词约束的需求的时候,就给这些量词分在一个组


# 量词
# {n}表示 这个量词之前的字符出现n次
# {n,} 表示这个量词之前的字符至少出现n次
# {n,m} 表示这个量词之前的字符出现n-m次
# ? 表示匹配量词之前的字符出现 0次 或者 1次 表示可有可无
# + 表示匹配量词之前的字符出现 1次 或者 多次
# * 表示匹配量词之前的字符出现 0次 或者 多次

# 练习题
# 匹配整数 \d+
# 匹配小数 \d+\.\d+
# 匹配小数或者整数
    # \d+\.\d+|\d+
    # \d+(\.\d+)?
# 匹配身份证号码 : [1-9]\d{16}[\dx]|[1-9]\d{14}
                # [1-9]\d{14}(\d{2}[\dX])?

# 正则表达式的匹配特点 : 贪婪匹配
# 它会在允许的范围内取最长的结果
# 非贪婪模式/惰性匹配 : 在量词的后面加上?
    # .*?x   匹配任意非换行符字符任意长度 直到遇到x就停止

# print(r'\\n')
# print(r'\n')

# 关于字符串挪到python中的转义的问题 : 只需要在工具中测试完毕,确认可以匹配上之后,挪到python中在字符串的外面加上r,r''即可


import re

